// @algorithm @lc id=166 lang=cpp 
// @title fraction-to-recurring-decimal


// #define print(...)
// @test(1,2)="0.5"
// @test(2,1)="2"
// @test(2,3)="0.(6)"
// @test(4,333)="0.(012)"
// @test(1,5)="0.2"
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        string ans;
        long n = numerator, d = denominator;
        if(n%d == 0) return to_string(n/d);
        // 符号
        if(n>0 ^ d>0) ans += '-';
        // 整数部分
        n = abs(n), d = abs(d);
        ans += to_string(n/d);
        ans += '.';
        // 小数部分
        unordered_map<int,int> ni;
        long r = n%d, i = ans.size();
        while(r && !ni.count(r)){
            ni[r] = i++;
            ans.push_back(r*10/d + '0');
            r = r*10%d;
        }
        // 循环
        if(r){
            ans.insert(ans.begin()+ni[r], '(');
            ans.push_back(')');
        }
        return ans;
    }
};